# 螳螂领地争霸

螳螂领地争霸 100

# 题目内容

在一根很高的竹子上生活着一群螳螂,每只螳螂都有一段自己的势力范围,不同螳螂在竹子上的领地有可能重叠,当发现自己的领地内出现其它螳螂时就会战斗,失败一方领地会被胜利一方螳螂占领。

# 输入描述

给定一个螳螂领地信息 originalLand[i] 数组:originalLand[i] = [x, y] 表示第 $i$ 只螳螂的领地在离地高度 $[x,y]$ 之间的主干上 $(x<y)$。螳螂的数量在 $[1,50]$ 之间,螳螂领地坐标 $[x,y]$ 中,$0 \le x < y \le 150$。

# 输出描述

请返回领地斗争结束后螳螂们的领地信息。返回的领地信息数组中,按照领地坐标升序返回;正确示例:[[3,7],[9,13]],错误示例:[[9,13],[3,7]]

# 样例

# 样例 1

输入

1,5 4,6 8,15
1

输出

1,6 8,15
1

说明: 第一只螳螂的领地范围 $[1,5]$ 和第二只螳螂的领地范围 $[4,6]$ 有重叠,因此两只螳螂在巡逻过程中会发生冲突,最终一只螳螂被打败,两只螳螂的领地被胜利者占有,领地范围变为 $[1,6]$。

# 样例 2

输入

3,7 9,13
1

输出

3,7 9,13
1

说明: 两只螳螂的领地范围没有重叠,因此不会发生冲突,所以最终的领地状态和最初的领地状态是一致的。

# 样例 3

输入

1,4 4,5
1

输出

1,5
1

说明: 两只螳螂领地边界接触时也会触发冲突,形成领地合并。

# 代码

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let inputs = [];
rl.on('line', (input) => {
    const originalLand = input.split(' ').map(v => v.split(',').map(Number));
    originalLand.sort((a,b) => a[0]-b[0]);
    let ans = [];
    for(let i=0; i<originalLand.length; i++) {
        if (i === 0) {
            ans.push(originalLand[i]);
        } else {
            const [x, y] = ans[ans.length-1];
            const [nx, ny] = originalLand[i];
            if (nx > y) {
                ans.push(originalLand[i]);
            } else {
                ans[ans.length - 1] = [x, y>ny ? y : ny];
            }
        }
    }
    console.log(ans.map(item => item.join(',')).join(' '))
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26